package com.wangxiaoxuan.seckill.Util;

import org.apache.commons.codec.digest.DigestUtils;

/**
 * @Description:MD5工具类
 **/
public class Md5Util {
    /**
     * 加密盐
     */
    private static final String SALT="a1b2c3d4";

    /**
     * MD5加密方法
     * @param src 要加密的字符串
     * @return
     */
    public static String md5(String src){
        return DigestUtils.md5Hex(src);
    }


    /**
     * 第一次加密：前端传入后端的MD5加密，这一次的加密盐使用的是本类中的SALT
     * 这次加密是在前端进行的，后端只是进行模拟
     * @param inputPass 第一次传入后端的真正密码
     * @return
     */
    public static String inputPassToFromPass(String inputPass){
        //将传进来的密码与加密盐无序混合
        String str=""+SALT.charAt(0)+SALT.charAt(2)+inputPass+SALT.charAt(5)+SALT.charAt(4);
        return md5(str);
    }

    /**
     * 第二次加密：后端传入数据库的MD5加密
     * @param fromPass 第一次加密之后的加密密码
     * @param salt 第二次加密盐
     * @return
     */
    public static String fromPassToDBPass(String fromPass,String salt){
        String str=SALT.charAt(2)+fromPass+SALT.charAt(0);
        return md5(str);
    }

    /**
     * 直接将以上两次加密整合到一块，后面直接调用这个方法即可
     * @param inputPass 前端输入进来的密码，即明码
     * @param salt 加密盐
     * @return
     */
    public static String inputPassToDBPass(String inputPass, String salt){
        String fromPass = inputPassToFromPass(inputPass);
        String dbPass = fromPassToDBPass(fromPass, salt);
        return dbPass;
    }

    public static void main(String[] args) {
        //模拟前端到后端的密码,46a347f8a5f5e2b5ab5b94868440c654
        String inputPassToFromPass = inputPassToFromPass("123456");
        System.out.println(inputPassToFromPass);
        //模拟后端到数据库的密码
        String fromPassToDBPass = fromPassToDBPass(inputPassToFromPass, "a1b2c3d4");
        System.out.println(fromPassToDBPass);
        //模拟前端直接到数据库的密码,bfe06f274e35afe61912c0bd3c64c365
        String inputPassToDBPass = inputPassToDBPass("123456", "a1b2c3d4");
        System.out.println(inputPassToDBPass);

    }

}
